package com.vehiclemanagement.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vehiclemanagement.entity.TrafficViolation;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 交通违章记录服务接口
 */
public interface TrafficViolationService extends IService<TrafficViolation> {

    /**
     * 分页查询交通违章记录
     *
     * @param current        当前页
     * @param size           每页大小
     * @param searchTerm     搜索关键词
     * @param vehicleId      车辆ID
     * @param driverId       驾驶员ID
     * @param violationType  违章类型
     * @param status         处理状态
     * @param startTime      开始时间
     * @param endTime        结束时间
     * @return 分页结果
     */
    IPage<TrafficViolation> pageViolations(Integer current, Integer size, String searchTerm,
                                          Long vehicleId, Long driverId, String violationType, 
                                          Integer status, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据ID获取交通违章记录
     *
     * @param id 记录ID
     * @return 交通违章记录
     */
    TrafficViolation getViolationById(Long id);

    /**
     * 添加交通违章记录
     *
     * @param violation 交通违章记录
     * @return 添加结果
     */
    boolean addViolation(TrafficViolation violation);

    /**
     * 更新交通违章记录
     *
     * @param violation 交通违章记录
     * @return 更新结果
     */
    boolean updateViolation(TrafficViolation violation);

    /**
     * 删除交通违章记录
     *
     * @param id 记录ID
     * @return 删除结果
     */
    boolean deleteViolation(Long id);

    /**
     * 处理交通违章
     *
     * @param id            违章记录ID
     * @param handler       处理人
     * @param handlingMethod 处理方式
     * @param remark        备注
     * @return 处理结果
     */
    boolean handleViolation(Long id, String handler, String handlingMethod, String remark);

    /**
     * 计算指定车辆的累计罚款金额
     *
     * @param vehicleId 车辆ID
     * @return 累计罚款金额
     */
    BigDecimal sumFineAmountByVehicleId(Long vehicleId);

    /**
     * 计算指定驾驶员的累计罚款金额
     *
     * @param driverId 驾驶员ID
     * @return 累计罚款金额
     */
    BigDecimal sumFineAmountByDriverId(Long driverId);

    /**
     * 计算指定车辆的累计扣分
     *
     * @param vehicleId 车辆ID
     * @return 累计扣分
     */
    Integer sumPointDeductionByVehicleId(Long vehicleId);

    /**
     * 计算指定驾驶员的累计扣分
     *
     * @param driverId 驾驶员ID
     * @return 累计扣分
     */
    Integer sumPointDeductionByDriverId(Long driverId);

    /**
     * 按月统计违章数量和罚款金额
     *
     * @param year 年份
     * @return 月度统计结果
     */
    List<Map<String, Object>> statisticsByMonth(Integer year);

    /**
     * 按违章类型统计违章数量和罚款金额
     *
     * @return 违章类型统计结果
     */
    List<Map<String, Object>> statisticsByViolationType();
} 